package com.cn.yunhe.rentcars.web;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import com.cn.yunhe.rentcars.mapper.RoleMapper;
import com.cn.yunhe.rentcars.mapper.RoleResourceMapper;
import com.cn.yunhe.rentcars.model.Role;
import com.cn.yunhe.rentcars.model.RoleResource;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

/**
 * 权限管理----系统角色信息
 * @author 赵志学
 *
 */
@RestController
public class RoleController {
	//注入系统角色信息操作接口。
	@Autowired
	private RoleMapper roleMapper;
	//注入角色--资源 关系接口。
	@Autowired
	private RoleResourceMapper rrMapper;
	/**
	 * 跳转到添加用户角色信息页面，
	 * 添加角色信息  URL=/rolesadd，method=GET
	 * @return
	 */
	@RequestMapping(value="/rolesadd",method=RequestMethod.GET)
	public ModelAndView addRoles(){
		return new ModelAndView("role-add");
	}
	/**
	 * 保存从添加用户信息页面提交 过来的数据。进行持久化。
	 * @param role
	 */
	@RequestMapping(value="/saveAddRoles",method=RequestMethod.POST)
	public void saveAddRoles(@RequestBody Role role,@RequestParam String checkAll){
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = new Date();
		role.setAddtime(sdf.format(date));
		//添加用户角色信息 到数据库
		roleMapper.addRole(role);
		if(checkAll!=null || "".equals(checkAll)){
			String []arr = checkAll.split(",");
			
			for(int i=0;i<arr.length;i++){
				
				RoleResource rr = new RoleResource();
				//将角色信息的ID　添加到角色资源关系对象里，
				rr.setRoleid(role.getRoleid());
				rr.setResourceid(arr[i]);
				rr.setAddtime(sdf.format(date));
				//调用 角色 资源关系接口  添加角色资源关系信息到数据库。
				rrMapper.addRoleResource(rr);
			}
		}	
	
		//System.out.println("添加成功");
	}
	//TODO 删除角色信息  URL=/rolesdelete/{roleid},method=delete
	/**
	 * 删除 一条用户角色信息。
	 */
	@RequestMapping(value="/roledelete",method=RequestMethod.POST)
	public void delRole(@RequestParam String roleid){
		//System.out.println("删除单挑用户角色信息:"+roleid);
		roleMapper.deleteRole(roleid);
		//System.out.println("删除成功");
	}
	/**
	 * 批量删除用户角色信息。
	 */
	@RequestMapping(value="/rolesdelete",method=RequestMethod.POST)
	public void delRoles(@RequestParam String rolesid){
		//System.out.println("批量删除用户角色信息"+rolesid);
		//将页面传递的字符串 rolesid 以 ‘，’号进行分割成数组，并将数组转换成 list集合形式。
		List<String> rid = Arrays.asList(rolesid.split(","));
		roleMapper.deleteRoles(rid);
		//System.out.println("删除成功");
	}

	/**
	 * 修改角色信息URL=/rolesedit/{roleid},method=put
	 * 从页面接收一个 角色ID 编号，查询出对应的详细信息，并返回到 角色信息修改页面
	 * @param roleid 角色ID
	 * @return 角色修改页面   /rolesedit
	 */
	@RequestMapping(value="/roleseditByRoleid",method=RequestMethod.GET)
	public ModelAndView rolesEdit(@RequestParam String roleid){
		//System.out.println("修改角色信息");
		Role role = roleMapper.selectRoleByRoleId(roleid);
		//System.out.println("角色名称："+role.getRolename());
		Map<String,Role> map = new HashMap<String,Role>();
		map.put("role", role);
		//将 map 集合传递到页面，用于修改用户角色信息。
		return new ModelAndView("role-edit",map);
	}
	/**
	 * 保存修改过后的角色信息。从页面接收一个角色信息对象。
	 * @param 角色信息对象
	 * @param 要修改的信息 编号。
	 */
	@RequestMapping(value="/saveEditRoles",method=RequestMethod.POST)
	public void saveEditRoles(@RequestBody Role role,@RequestParam String roleid,@RequestParam String checkAll){
		role.setRoleid(roleid);//将页面获取到的用户编号赋值给 role 对象
		roleMapper.editRole(role);//调用数据库进行修改信息。
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = new Date();
		if(checkAll!=null || "".equals(checkAll)){
			String []arr = checkAll.split(",");			
			System.out.println("全线数据"+arr[0]);
			for(int i=0;i<arr.length;i++){
				
				RoleResource rr = new RoleResource();
				//将角色信息的ID　添加到角色资源关系对象里，
				rr.setRoleid(role.getRoleid());
				rr.setResourceid(arr[i]);
				rr.setAddtime(sdf.format(date));
				//调用 角色 资源关系接口  添加角色资源关系信息到数据库。
				rrMapper.addRoleResource(rr);
			}
		}	
		//System.out.println("修改成功");
	}
	//TODO 查询角色信息  URL=/roles,method=GET
	
	//TODO 角色管理 首页： URL=/roleslist,method=GET
	/**
	 * 跳转到 角色管理 首页。。
	 * @return
	 */
	@RequestMapping(value="/roleslist",method=RequestMethod.GET)
	public ModelAndView rolesList(){
		
		return new ModelAndView("role-list");
	}
	/**
	 * 页面回调函数，在面上默认加载角色信息
	 * @return 返回个 map 集合 里面是json格式存放的数据。 
	 */
	@RequestMapping(value="/getRolesList",method=RequestMethod.GET)
	public Map<String,Object> getRolesList(@RequestParam int start,@RequestParam int length,@RequestParam int draw){
		
		int pageNum = start/length+1;//当前页的起始记录编号。
		int pageSize = length;//每页的记录条数
		Map<String ,String > map = new HashMap<String , String>(); 
		PageHelper.startPage(pageNum,pageSize);//构建分页信息。
		List<Role> rolelist = roleMapper.findRoles(map);
		PageInfo<Role> page = new PageInfo<Role>(rolelist);//每次只传递给页面指定的记录条数。
		
		Map<String,Object> rsMap = new HashMap<String, Object>();
		rsMap.put("draw", draw);
		rsMap.put("data", page.getList());//从pageInfo里面获取到数据库list集合
		rsMap.put("recordsTotal", page.getTotal());
		rsMap.put("recordsFiltered", page.getTotal());
		
		return rsMap;
	}

}
